home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 April: Mac OS SDK / Dev.CD Apr 97 SDK1.toast / Development Kits (Disc 1) / Interfaces&Libraries / Interfaces / AIncludes / SCSI.a < prev    next >
Encoding:
Text File  |  1996-05-06  |  41.2 KB  |  1,023 lines  |  [TEXT/MPS ]

  1. ;
  2. ;    File:        SCSI.a
  3. ;
  4. ;    Contains:    SCSI Manager Interfaces.
  5. ;
  6. ;    Version:    Technology:    System 7.5
  7. ;                Package:    Universal Interfaces 2.2.1
  8. ;
  9. ;    Copyright:    © 1984-1996 by Apple Computer, Inc.
  10. ;                All rights reserved.
  11. ;
  12. ;    Bugs?:        If you find a problem with this file, use the Apple Bug Reporter
  13. ;                stack.  Include the file and version information (from above)
  14. ;                in the problem description and send to:
  15. ;                    Internet:    apple.bugs@applelink.apple.com
  16. ;                    AppleLink:    APPLE.BUGS
  17. ;
  18. ;
  19.  
  20.     IF &TYPE('__SCSI__') = 'UNDEFINED' THEN
  21. __SCSI__ SET 1
  22.  
  23.  
  24.     IF &TYPE('__TYPES__') = 'UNDEFINED' THEN
  25.     include 'Types.a'
  26.     ENDIF
  27. ;        include 'ConditionalMacros.a'                                ;
  28.  
  29.     IF &TYPE('__MIXEDMODE__') = 'UNDEFINED' THEN
  30.     include 'MixedMode.a'
  31.     ENDIF
  32.  
  33. scInc                            EQU        1
  34. scNoInc                            EQU        2
  35. scAdd                            EQU        3
  36. scMove                            EQU        4
  37. scLoop                            EQU        5
  38. scNop                            EQU        6
  39. scStop                            EQU        7
  40. scComp                            EQU        8
  41.  
  42. ; SCSI Manager errors 
  43. scCommErr                        EQU        2                    ; communications error, operation timeout 
  44. scArbNBErr                        EQU        3                    ; arbitration timeout waiting for not BSY 
  45. scBadParmsErr                    EQU        4                    ; bad parameter or TIB opcode 
  46. scPhaseErr                        EQU        5                    ; SCSI bus not in correct phase for attempted operation 
  47. scCompareErr                    EQU        6                    ; data compare error 
  48. scMgrBusyErr                    EQU        7                    ; SCSI Manager busy  
  49. scSequenceErr                    EQU        8                    ; attempted operation is out of sequence 
  50. scBusTOErr                        EQU        9                    ; CPU bus timeout 
  51. scComplPhaseErr                    EQU        10                    ; SCSI bus wasn't in Status phase 
  52.  
  53. ; Signatures 
  54. sbSIGWord                        EQU        $4552                ; signature word for Block 0 ('ER') 
  55. sbMac                            EQU        1                    ; system type for Mac 
  56. pMapSIG                            EQU        $504D                ; partition map signature ('PM') 
  57. pdSigWord                        EQU        $5453
  58.  
  59. oldPMSigWord                    EQU        pdSigWord
  60. newPMSigWord                    EQU        pMapSIG
  61.  
  62. ; Driver Descriptor Map 
  63. Block0                     RECORD    0
  64. sbSig                     ds.w   1        ; offset: $0 (0)        ; unique value for SCSI block 0 
  65. sbBlkSize                 ds.w   1        ; offset: $2 (2)        ; block size of device 
  66. sbBlkCount                 ds.l   1        ; offset: $4 (4)        ; number of blocks on device 
  67. sbDevType                 ds.w   1        ; offset: $8 (8)        ; device type 
  68. sbDevId                     ds.w   1        ; offset: $A (10)        ; device id 
  69. sbData                     ds.l   1        ; offset: $C (12)        ; not used 
  70. sbDrvrCount                 ds.w   1        ; offset: $10 (16)        ; driver descriptor count 
  71. ddBlock                     ds.l   1        ; offset: $12 (18)        ; 1st driver's starting block 
  72. ddSize                     ds.w   1        ; offset: $16 (22)        ; size of 1st driver (512-byte blks) 
  73. ddType                     ds.w   1        ; offset: $18 (24)        ; system type (1 for Mac+) 
  74. ddPad                     ds.w   243        ; offset: $1A (26)        ; ARRAY[0..242] OF INTEGER; not used 
  75. sizeof                     EQU *            ; size:   $200 (512)
  76.                         ENDR
  77.  
  78. ; typedef struct Block0     Block0
  79. ;Driver descriptor
  80. DDMap                     RECORD    0
  81. ddBlock                     ds.l   1        ; offset: $0 (0)        ; 1st driver's starting block 
  82. ddSize                     ds.w   1        ; offset: $4 (4)        ; size of 1st driver (512-byte blks) 
  83. ddType                     ds.w   1        ; offset: $6 (6)        ; system type (1 for Mac+) 
  84. sizeof                     EQU *            ; size:   $8 (8)
  85.                         ENDR
  86.  
  87. ; typedef struct DDMap         DDMap
  88. ; Partition Map Entry 
  89. Partition                 RECORD    0
  90. pmSig                     ds.w   1        ; offset: $0 (0)        ; unique value for map entry blk 
  91. pmSigPad                 ds.w   1        ; offset: $2 (2)        ; currently unused 
  92. pmMapBlkCnt                 ds.l   1        ; offset: $4 (4)        ; # of blks in partition map 
  93. pmPyPartStart             ds.l   1        ; offset: $8 (8)        ; physical start blk of partition 
  94. pmPartBlkCnt             ds.l   1        ; offset: $C (12)        ; # of blks in this partition 
  95. pmPartName                 ds.b   32        ; offset: $10 (16)        ; ASCII partition name 
  96. pmParType                 ds.b   32        ; offset: $30 (48)        ; ASCII partition type 
  97. pmLgDataStart             ds.l   1        ; offset: $50 (80)        ; log. # of partition's 1st data blk 
  98. pmDataCnt                 ds.l   1        ; offset: $54 (84)        ; # of blks in partition's data area 
  99. pmPartStatus             ds.l   1        ; offset: $58 (88)        ; bit field for partition status 
  100. pmLgBootStart             ds.l   1        ; offset: $5C (92)        ; log. blk of partition's boot code 
  101. pmBootSize                 ds.l   1        ; offset: $60 (96)        ; number of bytes in boot code 
  102. pmBootAddr                 ds.l   1        ; offset: $64 (100)        ; memory load address of boot code 
  103. pmBootAddr2                 ds.l   1        ; offset: $68 (104)        ; currently unused 
  104. pmBootEntry                 ds.l   1        ; offset: $6C (108)        ; entry point of boot code 
  105. pmBootEntry2             ds.l   1        ; offset: $70 (112)        ; currently unused 
  106. pmBootCksum                 ds.l   1        ; offset: $74 (116)        ; checksum of boot code 
  107. pmProcessor                 ds.b   16        ; offset: $78 (120)        ; ASCII for the processor type 
  108. pmPad                     ds.w   188        ; offset: $88 (136)        ; ARRAY[0..187] OF INTEGER; not used 
  109. sizeof                     EQU *            ; size:   $200 (512)
  110.                         ENDR
  111.  
  112. ; typedef struct Partition     Partition
  113. ; TIB instruction 
  114. SCSIInstr                 RECORD    0
  115. scOpcode                 ds.w   1        ; offset: $0 (0)
  116. scParam1                 ds.l   1        ; offset: $2 (2)
  117. scParam2                 ds.l   1        ; offset: $6 (6)
  118. sizeof                     EQU *            ; size:   $A (10)
  119.                         ENDR
  120.  
  121. ; typedef struct SCSIInstr     SCSIInstr
  122. ;
  123. ; pascal OSErr SCSIReset(void)
  124. ;
  125.     IF ¬ GENERATINGCFM THEN
  126.         Macro
  127.         _SCSIReset
  128.             dc.w     $4267
  129.             dc.w     $A815
  130.         EndM
  131.     ELSE
  132.         IMPORT_CFM_FUNCTION    SCSIReset
  133.     ENDIF
  134.  
  135. ;
  136. ; pascal OSErr SCSIGet(void)
  137. ;
  138.     IF ¬ GENERATINGCFM THEN
  139.         Macro
  140.         _SCSIGet
  141.             move.w    #$0001,-(sp)
  142.             dc.w     $A815
  143.         EndM
  144.     ELSE
  145.         IMPORT_CFM_FUNCTION    SCSIGet
  146.     ENDIF
  147.  
  148. ;
  149. ; pascal OSErr SCSISelect(short targetID)
  150. ;
  151.     IF ¬ GENERATINGCFM THEN
  152.         Macro
  153.         _SCSISelect
  154.             move.w    #$0002,-(sp)
  155.             dc.w     $A815
  156.         EndM
  157.     ELSE
  158.         IMPORT_CFM_FUNCTION    SCSISelect
  159.     ENDIF
  160.  
  161. ;
  162. ; pascal OSErr SCSICmd(Ptr buffer, short count)
  163. ;
  164.     IF ¬ GENERATINGCFM THEN
  165.         Macro
  166.         _SCSICmd
  167.             move.w    #$0003,-(sp)
  168.             dc.w     $A815
  169.         EndM
  170.     ELSE
  171.         IMPORT_CFM_FUNCTION    SCSICmd
  172.     ENDIF
  173.  
  174. ;
  175. ; pascal OSErr SCSIRead(Ptr tibPtr)
  176. ;
  177.     IF ¬ GENERATINGCFM THEN
  178.         Macro
  179.         _SCSIRead
  180.             move.w    #$0005,-(sp)
  181.             dc.w     $A815
  182.         EndM
  183.     ELSE
  184.         IMPORT_CFM_FUNCTION    SCSIRead
  185.     ENDIF
  186.  
  187. ;
  188. ; pascal OSErr SCSIRBlind(Ptr tibPtr)
  189. ;
  190.     IF ¬ GENERATINGCFM THEN
  191.         Macro
  192.         _SCSIRBlind
  193.             move.w    #$0008,-(sp)
  194.             dc.w     $A815
  195.         EndM
  196.     ELSE
  197.         IMPORT_CFM_FUNCTION    SCSIRBlind
  198.     ENDIF
  199.  
  200. ;
  201. ; pascal OSErr SCSIWrite(Ptr tibPtr)
  202. ;
  203.     IF ¬ GENERATINGCFM THEN
  204.         Macro
  205.         _SCSIWrite
  206.             move.w    #$0006,-(sp)
  207.             dc.w     $A815
  208.         EndM
  209.     ELSE
  210.         IMPORT_CFM_FUNCTION    SCSIWrite
  211.     ENDIF
  212.  
  213. ;
  214. ; pascal OSErr SCSIWBlind(Ptr tibPtr)
  215. ;
  216.     IF ¬ GENERATINGCFM THEN
  217.         Macro
  218.         _SCSIWBlind
  219.             move.w    #$0009,-(sp)
  220.             dc.w     $A815
  221.         EndM
  222.     ELSE
  223.         IMPORT_CFM_FUNCTION    SCSIWBlind
  224.     ENDIF
  225.  
  226. ;
  227. ; pascal OSErr SCSIComplete(short *stat, short *message, unsigned long wait)
  228. ;
  229.     IF ¬ GENERATINGCFM THEN
  230.         Macro
  231.         _SCSIComplete
  232.             move.w    #$0004,-(sp)
  233.             dc.w     $A815
  234.         EndM
  235.     ELSE
  236.         IMPORT_CFM_FUNCTION    SCSIComplete
  237.     ENDIF
  238.  
  239. ;
  240. ; pascal short SCSIStat(void)
  241. ;
  242.     IF ¬ GENERATINGCFM THEN
  243.         Macro
  244.         _SCSIStat
  245.             move.w    #$000A,-(sp)
  246.             dc.w     $A815
  247.         EndM
  248.     ELSE
  249.         IMPORT_CFM_FUNCTION    SCSIStat
  250.     ENDIF
  251.  
  252. ;
  253. ; pascal OSErr SCSISelAtn(short targetID)
  254. ;
  255.     IF ¬ GENERATINGCFM THEN
  256.         Macro
  257.         _SCSISelAtn
  258.             move.w    #$000B,-(sp)
  259.             dc.w     $A815
  260.         EndM
  261.     ELSE
  262.         IMPORT_CFM_FUNCTION    SCSISelAtn
  263.     ENDIF
  264.  
  265. ;
  266. ; pascal OSErr SCSIMsgIn(short *message)
  267. ;
  268.     IF ¬ GENERATINGCFM THEN
  269.         Macro
  270.         _SCSIMsgIn
  271.             move.w    #$000C,-(sp)
  272.             dc.w     $A815
  273.         EndM
  274.     ELSE
  275.         IMPORT_CFM_FUNCTION    SCSIMsgIn
  276.     ENDIF
  277.  
  278. ;
  279. ; pascal OSErr SCSIMsgOut(short message)
  280. ;
  281.     IF ¬ GENERATINGCFM THEN
  282.         Macro
  283.         _SCSIMsgOut
  284.             move.w    #$000D,-(sp)
  285.             dc.w     $A815
  286.         EndM
  287.     ELSE
  288.         IMPORT_CFM_FUNCTION    SCSIMsgOut
  289.     ENDIF
  290.  
  291. ;——————————————————————— New SCSI Manager Interface ———————————————————————
  292.  
  293. scsiVERSION                        EQU        43
  294.  
  295. ; SCSI Manager function codes 
  296. SCSINop                            EQU        $00                    ; Execute nothing                                         
  297. SCSIExecIO                        EQU        $01                    ; Execute the specified IO                             
  298. SCSIBusInquiry                    EQU        $03                    ; Get parameters for entire path of HBAs                 
  299. SCSIReleaseQ                    EQU        $04                    ; Release the frozen SIM queue for particular LUN         
  300. SCSIAbortCommand                EQU        $10                    ; Abort the selected Control Block                      
  301. SCSIResetBus                    EQU        $11                    ; Reset the SCSI bus                                      
  302. SCSIResetDevice                    EQU        $12                    ; Reset the SCSI device                                  
  303. SCSITerminateIO                    EQU        $13                    ; Terminate any pending IO                              
  304. SCSIGetVirtualIDInfo            EQU        $80                    ; Find out which bus old ID is on                         
  305. SCSILoadDriver                    EQU        $82                    ; Load a driver for a device ident                     
  306. SCSIOldCall                        EQU        $84                    ; XPT->SIM private call for old-API                     
  307. SCSICreateRefNumXref            EQU        $85                    ; Register a DeviceIdent to drvr RefNum xref             
  308. SCSILookupRefNumXref            EQU        $86                    ; Get DeviceIdent to drvr RefNum xref                     
  309. SCSIRemoveRefNumXref            EQU        $87                    ; Remove a DeviceIdent to drvr RefNum xref             
  310. SCSIRegisterWithNewXPT            EQU        $88                    ; XPT has changed - SIM needs to re-register itself     
  311. vendorUnique                    EQU        $C0                    ; 0xC0 thru 0xFF 
  312.  
  313. ; SCSI Callback Procedure Prototypes 
  314. ; SCSIInterruptPollProcPtr is obsolete (use SCSIInterruptProcPtr) but still here for compatibility 
  315. handshakeDataLength                EQU        8                    ; Handshake data length 
  316. maxCDBLength                    EQU        16                    ; Space for the CDB bytes/pointer 
  317. vendorIDLength                    EQU        16                    ; ASCII string len for Vendor ID  
  318.  
  319. ; Define DeviceIdent structure 
  320. DeviceIdent             RECORD    0
  321. diReserved                 ds.b   1        ; offset: $0 (0)        ; reserved                 
  322. bus                         ds.b   1        ; offset: $1 (1)        ; SCSI - Bus Number        
  323. targetID                 ds.b   1        ; offset: $2 (2)        ; SCSI - Target SCSI ID    
  324. LUN                         ds.b   1        ; offset: $3 (3)        ; SCSI - LUN                  
  325. sizeof                     EQU *            ; size:   $4 (4)
  326.                         ENDR
  327.  
  328. ; typedef struct DeviceIdent  DeviceIdent
  329. ; Command Descriptor Block structure 
  330. CDB                     RECORD    0
  331. cdbPtr                     ds.l   1        ; offset: $0 (0)        ; pointer to the CDB, or 
  332.                          ORG 0
  333. cdbBytes                 ds.b   16        ; offset: $0 (0)        ; the actual CDB to send 
  334.                          ORG 16
  335. sizeof                     EQU *            ; size:   $10 (16)
  336.                         ENDR
  337.  
  338. ; typedef union CDB         CDB, *CDBPtr
  339. ; Scatter/gather list element 
  340. SGRecord                 RECORD    0
  341. SGAddr                     ds.l   1        ; offset: $0 (0)
  342. SGCount                     ds.l   1        ; offset: $4 (4)
  343. sizeof                     EQU *            ; size:   $8 (8)
  344.                         ENDR
  345.  
  346. ; typedef struct SGRecord     SGRecord
  347. ; SCSI Phases (used by SIMs to support the Original SCSI Manager 
  348.  
  349. kDataOutPhase                    EQU        0                    ; Encoded MSG, C/D, I/O bits 
  350. kDataInPhase                    EQU        1
  351. kCommandPhase                    EQU        2
  352. kStatusPhase                    EQU        3
  353. kPhaseIllegal0                    EQU        4
  354. kPhaseIllegal1                    EQU        5
  355. kMessageOutPhase                EQU        6
  356. kMessageInPhase                    EQU        7
  357. kBusFreePhase                    EQU        8                    ; Additional Phases 
  358. kArbitratePhase                    EQU        9
  359. kSelectPhase                    EQU        10
  360. kMessageInPhaseNACK                EQU        11                    ; Message In Phase with ACK hanging on the bus 
  361.  
  362. SCSIHdr                 RECORD    0
  363. qLink                     ds.l   1        ; offset: $0 (0)
  364. scsiReserved1             ds.w   1        ; offset: $4 (4)
  365. scsiPBLength             ds.w   1        ; offset: $6 (6)
  366. scsiFunctionCode         ds.b   1        ; offset: $8 (8)
  367. scsiReserved2             ds.b   1        ; offset: $9 (9)
  368. scsiResult                 ds.w   1        ; offset: $A (10)
  369. scsiDevice                 ds     DeviceIdent ; offset: $C (12)
  370. scsiCompletion             ds.l   1        ; offset: $10 (16)
  371. scsiFlags                 ds.l   1        ; offset: $14 (20)
  372. scsiDriverStorage         ds.l   1        ; offset: $18 (24)
  373. scsiXPTprivate             ds.l   1        ; offset: $1C (28)
  374. scsiReserved3             ds.l   1        ; offset: $20 (32)
  375. sizeof                     EQU *            ; size:   $24 (36)
  376.                         ENDR
  377.  
  378. ; typedef struct SCSIHdr     SCSIHdr
  379. SCSI_PB                 RECORD    0
  380. qLink                     ds.l   1        ; offset: $0 (0)
  381. scsiReserved1             ds.w   1        ; offset: $4 (4)
  382. scsiPBLength             ds.w   1        ; offset: $6 (6)
  383. scsiFunctionCode         ds.b   1        ; offset: $8 (8)
  384. scsiReserved2             ds.b   1        ; offset: $9 (9)
  385. scsiResult                 ds.w   1        ; offset: $A (10)
  386. scsiDevice                 ds     DeviceIdent ; offset: $C (12)
  387. scsiCompletion             ds.l   1        ; offset: $10 (16)
  388. scsiFlags                 ds.l   1        ; offset: $14 (20)
  389. scsiDriverStorage         ds.l   1        ; offset: $18 (24)
  390. scsiXPTprivate             ds.l   1        ; offset: $1C (28)
  391. scsiReserved3             ds.l   1        ; offset: $20 (32)
  392. sizeof                     EQU *            ; size:   $24 (36)
  393.                         ENDR
  394.  
  395. ; typedef struct SCSI_PB     SCSI_PB
  396. SCSI_IO                 RECORD    0
  397. qLink                     ds.l   1        ; offset: $0 (0)
  398. scsiReserved1             ds.w   1        ; offset: $4 (4)
  399. scsiPBLength             ds.w   1        ; offset: $6 (6)
  400. scsiFunctionCode         ds.b   1        ; offset: $8 (8)
  401. scsiReserved2             ds.b   1        ; offset: $9 (9)
  402. scsiResult                 ds.w   1        ; offset: $A (10)
  403. scsiDevice                 ds     DeviceIdent ; offset: $C (12)
  404. scsiCompletion             ds.l   1        ; offset: $10 (16)
  405. scsiFlags                 ds.l   1        ; offset: $14 (20)
  406. scsiDriverStorage         ds.l   1        ; offset: $18 (24)
  407. scsiXPTprivate             ds.l   1        ; offset: $1C (28)
  408. scsiReserved3             ds.l   1        ; offset: $20 (32)
  409. scsiResultFlags             ds.w   1        ; offset: $24 (36)
  410. scsiReserved3pt5         ds.w   1        ; offset: $26 (38)
  411. scsiDataPtr                 ds.l   1        ; offset: $28 (40)
  412. scsiDataLength             ds.l   1        ; offset: $2C (44)
  413. scsiSensePtr             ds.l   1        ; offset: $30 (48)
  414. scsiSenseLength             ds.b   1        ; offset: $34 (52)
  415. scsiCDBLength             ds.b   1        ; offset: $35 (53)
  416. scsiSGListCount             ds.w   1        ; offset: $36 (54)
  417. scsiReserved4             ds.l   1        ; offset: $38 (56)
  418. scsiSCSIstatus             ds.b   1        ; offset: $3C (60)
  419. scsiSenseResidual         ds.b   1        ; offset: $3D (61)
  420. scsiReserved5             ds.w   1        ; offset: $3E (62)
  421. scsiDataResidual         ds.l   1        ; offset: $40 (64)
  422. scsiCDB                     ds.l   4        ; offset: $44 (68)
  423. scsiTimeout                 ds.l   1        ; offset: $54 (84)
  424. scsiReserved5pt5         ds.l   1        ; offset: $58 (88)
  425. scsiReserved5pt6         ds.w   1        ; offset: $5C (92)
  426. scsiIOFlags                 ds.w   1        ; offset: $5E (94)
  427. scsiTagAction             ds.b   1        ; offset: $60 (96)
  428. scsiReserved6             ds.b   1        ; offset: $61 (97)
  429. scsiReserved7             ds.w   1        ; offset: $62 (98)
  430. scsiSelectTimeout         ds.w   1        ; offset: $64 (100)
  431. scsiDataType             ds.b   1        ; offset: $66 (102)
  432. scsiTransferType         ds.b   1        ; offset: $67 (103)
  433. scsiReserved8             ds.l   1        ; offset: $68 (104)
  434. scsiReserved9             ds.l   1        ; offset: $6C (108)
  435. scsiHandshake             ds.w   8        ; offset: $70 (112)
  436. scsiReserved10             ds.l   1        ; offset: $80 (128)
  437. scsiReserved11             ds.l   1        ; offset: $84 (132)
  438. scsiCommandLink             ds.l   1        ; offset: $88 (136)
  439. scsiSIMpublics             ds.b   8        ; offset: $8C (140)
  440. scsiAppleReserved6         ds.b   8        ; offset: $94 (148)
  441. scsiCurrentPhase         ds.w   1        ; offset: $9C (156)
  442. scsiSelector             ds.w   1        ; offset: $9E (158)
  443. scsiOldCallResult         ds.w   1        ; offset: $A0 (160)
  444. scsiSCSImessage             ds.b   1        ; offset: $A2 (162)
  445. XPTprivateFlags             ds.b   1        ; offset: $A3 (163)
  446. XPTextras                 ds.b   12        ; offset: $A4 (164)
  447. sizeof                     EQU *            ; size:   $B0 (176)
  448.                         ENDR
  449.  
  450. ; typedef struct SCSI_IO     SCSI_IO
  451. ; typedef SCSI_IO             SCSIExecIOPB
  452. ; Bus inquiry PB 
  453. SCSIBusInquiryPB         RECORD    0
  454. qLink                     ds.l   1        ; offset: $0 (0)
  455. scsiReserved1             ds.w   1        ; offset: $4 (4)
  456. scsiPBLength             ds.w   1        ; offset: $6 (6)
  457. scsiFunctionCode         ds.b   1        ; offset: $8 (8)
  458. scsiReserved2             ds.b   1        ; offset: $9 (9)
  459. scsiResult                 ds.w   1        ; offset: $A (10)
  460. scsiDevice                 ds     DeviceIdent ; offset: $C (12)
  461. scsiCompletion             ds.l   1        ; offset: $10 (16)
  462. scsiFlags                 ds.l   1        ; offset: $14 (20)
  463. scsiDriverStorage         ds.l   1        ; offset: $18 (24)
  464. scsiXPTprivate             ds.l   1        ; offset: $1C (28)
  465. scsiReserved3             ds.l   1        ; offset: $20 (32)
  466. scsiEngineCount             ds.w   1        ; offset: $24 (36)        ; <- Number of engines on HBA                         
  467. scsiMaxTransferType         ds.w   1        ; offset: $26 (38)        ; <- Number of transfer types for this HBA            
  468. scsiDataTypes             ds.l   1        ; offset: $28 (40)        ; <- which data types are supported by this SIM     
  469. scsiIOpbSize             ds.w   1        ; offset: $2C (44)        ; <- Size of SCSI_IO PB for this SIM/HBA             
  470. scsiMaxIOpbSize             ds.w   1        ; offset: $2E (46)        ; <- Size of max SCSI_IO PB for all SIM/HBAs         
  471. scsiFeatureFlags         ds.l   1        ; offset: $30 (48)        ; <- Supported features flags field                 
  472. scsiVersionNumber         ds.b   1        ; offset: $34 (52)        ; <- Version number for the SIM/HBA                 
  473. scsiHBAInquiry             ds.b   1        ; offset: $35 (53)        ; <- Mimic of INQ byte 7 for the HBA                 
  474. scsiTargetModeFlags         ds.b   1        ; offset: $36 (54)        ; <- Flags for target mode support                 
  475. scsiScanFlags             ds.b   1        ; offset: $37 (55)        ; <- Scan related feature flags                     
  476. scsiSIMPrivatesPtr         ds.l   1        ; offset: $38 (56)        ; <- Ptr to SIM private data area                     
  477. scsiSIMPrivatesSize         ds.l   1        ; offset: $3C (60)        ; <- Size of SIM private data area                 
  478. scsiAsyncFlags             ds.l   1        ; offset: $40 (64)        ; <- Event cap. for Async Callback                 
  479. scsiHiBusID                 ds.b   1        ; offset: $44 (68)        ; <- Highest path ID in the subsystem              
  480. scsiInitiatorID             ds.b   1        ; offset: $45 (69)        ; <- ID of the HBA on the SCSI bus                 
  481. scsiBIReserved0             ds.w   1        ; offset: $46 (70)        ;                                                    
  482. scsiBIReserved1             ds.l   1        ; offset: $48 (72)        ; <-                                                  
  483. scsiFlagsSupported         ds.l   1        ; offset: $4C (76)        ; <- which scsiFlags are supported                 
  484. scsiIOFlagsSupported     ds.w   1        ; offset: $50 (80)        ; <- which scsiIOFlags are supported                 
  485. scsiWeirdStuff             ds.w   1        ; offset: $52 (82)        ; <-                                                 
  486. scsiMaxTarget             ds.w   1        ; offset: $54 (84)        ; <- maximum Target number supported                 
  487. scsiMaxLUN                 ds.w   1        ; offset: $56 (86)        ; <- maximum Logical Unit number supported         
  488. scsiSIMVendor             ds.b   16        ; offset: $58 (88)        ; <- Vendor ID of SIM (or XPT if bus<FF)         
  489. scsiHBAVendor             ds.b   16        ; offset: $68 (104)        ; <- Vendor ID of the HBA                         
  490. scsiControllerFamily     ds.b   16        ; offset: $78 (120)        ; <- Family of SCSI Controller                 
  491. scsiControllerType         ds.b   16        ; offset: $88 (136)        ; <- Specific Model of SCSI Controller used     
  492. scsiXPTversion             ds.b   4        ; offset: $98 (152)        ; <- version number of XPT                         
  493. scsiSIMversion             ds.b   4        ; offset: $9C (156)        ; <- version number of SIM                         
  494. scsiHBAversion             ds.b   4        ; offset: $A0 (160)        ; <- version number of HBA                         
  495. scsiHBAslotType             ds.b   1        ; offset: $A4 (164)        ; <- type of "slot" that this HBA is in            
  496. scsiHBAslotNumber         ds.b   1        ; offset: $A5 (165)        ; <- slot number of this HBA                         
  497. scsiSIMsRsrcID             ds.w   1        ; offset: $A6 (166)        ; <- resource ID of this SIM                         
  498. scsiBIReserved3             ds.w   1        ; offset: $A8 (168)        ; <-                                                 
  499. scsiAdditionalLength     ds.w   1        ; offset: $AA (170)        ; <- additional BusInquiry PB len                    
  500. sizeof                     EQU *            ; size:   $AC (172)
  501.                         ENDR
  502.  
  503. ; typedef struct SCSIBusInquiryPB  SCSIBusInquiryPB
  504. ; Abort SIM Request PB 
  505. SCSIAbortCommandPB         RECORD    0
  506. qLink                     ds.l   1        ; offset: $0 (0)
  507. scsiReserved1             ds.w   1        ; offset: $4 (4)
  508. scsiPBLength             ds.w   1        ; offset: $6 (6)
  509. scsiFunctionCode         ds.b   1        ; offset: $8 (8)
  510. scsiReserved2             ds.b   1        ; offset: $9 (9)
  511. scsiResult                 ds.w   1        ; offset: $A (10)
  512. scsiDevice                 ds     DeviceIdent ; offset: $C (12)
  513. scsiCompletion             ds.l   1        ; offset: $10 (16)
  514. scsiFlags                 ds.l   1        ; offset: $14 (20)
  515. scsiDriverStorage         ds.l   1        ; offset: $18 (24)
  516. scsiXPTprivate             ds.l   1        ; offset: $1C (28)
  517. scsiReserved3             ds.l   1        ; offset: $20 (32)
  518. scsiIOptr                 ds.l   1        ; offset: $24 (36)        ; Pointer to the PB to abort                        
  519. sizeof                     EQU *            ; size:   $28 (40)
  520.                         ENDR
  521.  
  522. ; typedef struct SCSIAbortCommandPB  SCSIAbortCommandPB
  523. ; Terminate I/O Process Request PB 
  524. SCSITerminateIOPB         RECORD    0
  525. qLink                     ds.l   1        ; offset: $0 (0)
  526. scsiReserved1             ds.w   1        ; offset: $4 (4)
  527. scsiPBLength             ds.w   1        ; offset: $6 (6)
  528. scsiFunctionCode         ds.b   1        ; offset: $8 (8)
  529. scsiReserved2             ds.b   1        ; offset: $9 (9)
  530. scsiResult                 ds.w   1        ; offset: $A (10)
  531. scsiDevice                 ds     DeviceIdent ; offset: $C (12)
  532. scsiCompletion             ds.l   1        ; offset: $10 (16)
  533. scsiFlags                 ds.l   1        ; offset: $14 (20)
  534. scsiDriverStorage         ds.l   1        ; offset: $18 (24)
  535. scsiXPTprivate             ds.l   1        ; offset: $1C (28)
  536. scsiReserved3             ds.l   1        ; offset: $20 (32)
  537. scsiIOptr                 ds.l   1        ; offset: $24 (36)        ; Pointer to the PB to terminate                     
  538. sizeof                     EQU *            ; size:   $28 (40)
  539.                         ENDR
  540.  
  541. ; typedef struct SCSITerminateIOPB  SCSITerminateIOPB
  542. ; Reset SCSI Bus PB 
  543. SCSIResetBusPB             RECORD    0
  544. qLink                     ds.l   1        ; offset: $0 (0)
  545. scsiReserved1             ds.w   1        ; offset: $4 (4)
  546. scsiPBLength             ds.w   1        ; offset: $6 (6)
  547. scsiFunctionCode         ds.b   1        ; offset: $8 (8)
  548. scsiReserved2             ds.b   1        ; offset: $9 (9)
  549. scsiResult                 ds.w   1        ; offset: $A (10)
  550. scsiDevice                 ds     DeviceIdent ; offset: $C (12)
  551. scsiCompletion             ds.l   1        ; offset: $10 (16)
  552. scsiFlags                 ds.l   1        ; offset: $14 (20)
  553. scsiDriverStorage         ds.l   1        ; offset: $18 (24)
  554. scsiXPTprivate             ds.l   1        ; offset: $1C (28)
  555. scsiReserved3             ds.l   1        ; offset: $20 (32)
  556. sizeof                     EQU *            ; size:   $24 (36)
  557.                         ENDR
  558.  
  559. ; typedef struct SCSIResetBusPB  SCSIResetBusPB
  560. ; Reset SCSI Device PB 
  561. SCSIResetDevicePB         RECORD    0
  562. qLink                     ds.l   1        ; offset: $0 (0)
  563. scsiReserved1             ds.w   1        ; offset: $4 (4)
  564. scsiPBLength             ds.w   1        ; offset: $6 (6)
  565. scsiFunctionCode         ds.b   1        ; offset: $8 (8)
  566. scsiReserved2             ds.b   1        ; offset: $9 (9)
  567. scsiResult                 ds.w   1        ; offset: $A (10)
  568. scsiDevice                 ds     DeviceIdent ; offset: $C (12)
  569. scsiCompletion             ds.l   1        ; offset: $10 (16)
  570. scsiFlags                 ds.l   1        ; offset: $14 (20)
  571. scsiDriverStorage         ds.l   1        ; offset: $18 (24)
  572. scsiXPTprivate             ds.l   1        ; offset: $1C (28)
  573. scsiReserved3             ds.l   1        ; offset: $20 (32)
  574. sizeof                     EQU *            ; size:   $24 (36)
  575.                         ENDR
  576.  
  577. ; typedef struct SCSIResetDevicePB  SCSIResetDevicePB
  578. ; Release SIM Queue PB 
  579. SCSIReleaseQPB             RECORD    0
  580. qLink                     ds.l   1        ; offset: $0 (0)
  581. scsiReserved1             ds.w   1        ; offset: $4 (4)
  582. scsiPBLength             ds.w   1        ; offset: $6 (6)
  583. scsiFunctionCode         ds.b   1        ; offset: $8 (8)
  584. scsiReserved2             ds.b   1        ; offset: $9 (9)
  585. scsiResult                 ds.w   1        ; offset: $A (10)
  586. scsiDevice                 ds     DeviceIdent ; offset: $C (12)
  587. scsiCompletion             ds.l   1        ; offset: $10 (16)
  588. scsiFlags                 ds.l   1        ; offset: $14 (20)
  589. scsiDriverStorage         ds.l   1        ; offset: $18 (24)
  590. scsiXPTprivate             ds.l   1        ; offset: $1C (28)
  591. scsiReserved3             ds.l   1        ; offset: $20 (32)
  592. sizeof                     EQU *            ; size:   $24 (36)
  593.                         ENDR
  594.  
  595. ; typedef struct SCSIReleaseQPB  SCSIReleaseQPB
  596. ; SCSI Get Virtual ID Info PB 
  597. SCSIGetVirtualIDInfoPB     RECORD    0
  598. qLink                     ds.l   1        ; offset: $0 (0)
  599. scsiReserved1             ds.w   1        ; offset: $4 (4)
  600. scsiPBLength             ds.w   1        ; offset: $6 (6)
  601. scsiFunctionCode         ds.b   1        ; offset: $8 (8)
  602. scsiReserved2             ds.b   1        ; offset: $9 (9)
  603. scsiResult                 ds.w   1        ; offset: $A (10)
  604. scsiDevice                 ds     DeviceIdent ; offset: $C (12)
  605. scsiCompletion             ds.l   1        ; offset: $10 (16)
  606. scsiFlags                 ds.l   1        ; offset: $14 (20)
  607. scsiDriverStorage         ds.l   1        ; offset: $18 (24)
  608. scsiXPTprivate             ds.l   1        ; offset: $1C (28)
  609. scsiReserved3             ds.l   1        ; offset: $20 (32)
  610. scsiOldCallID             ds.w   1        ; offset: $24 (36)        ; -> SCSI ID of device in question             
  611. scsiExists                 ds.b   1        ; offset: $26 (38)        ; <- true if device exists                     
  612. filler                     ds.b   1        ; offset: $27 (39)
  613. sizeof                     EQU *            ; size:   $28 (40)
  614.                         ENDR
  615.  
  616. ; typedef struct SCSIGetVirtualIDInfoPB  SCSIGetVirtualIDInfoPB
  617. ; Create/Lookup/Remove RefNum for Device PB 
  618. SCSIDriverPB             RECORD    0
  619. qLink                     ds.l   1        ; offset: $0 (0)
  620. scsiReserved1             ds.w   1        ; offset: $4 (4)
  621. scsiPBLength             ds.w   1        ; offset: $6 (6)
  622. scsiFunctionCode         ds.b   1        ; offset: $8 (8)
  623. scsiReserved2             ds.b   1        ; offset: $9 (9)
  624. scsiResult                 ds.w   1        ; offset: $A (10)
  625. scsiDevice                 ds     DeviceIdent ; offset: $C (12)
  626. scsiCompletion             ds.l   1        ; offset: $10 (16)
  627. scsiFlags                 ds.l   1        ; offset: $14 (20)
  628. scsiDriverStorage         ds.l   1        ; offset: $18 (24)
  629. scsiXPTprivate             ds.l   1        ; offset: $1C (28)
  630. scsiReserved3             ds.l   1        ; offset: $20 (32)
  631. scsiDriver                 ds.w   1        ; offset: $24 (36)        ; -> DriverRefNum, For SetDriver, <- For GetNextDriver 
  632. scsiDriverFlags             ds.w   1        ; offset: $26 (38)        ; <> Details of driver/device                     
  633. scsiNextDevice             ds     DeviceIdent ; offset: $28 (40)    ; <- DeviceIdent of the NEXT Item in the list  
  634. sizeof                     EQU *            ; size:   $2C (44)
  635.                         ENDR
  636.  
  637. ; typedef struct SCSIDriverPB  SCSIDriverPB
  638. ; Load Driver PB 
  639. SCSILoadDriverPB         RECORD    0
  640. qLink                     ds.l   1        ; offset: $0 (0)
  641. scsiReserved1             ds.w   1        ; offset: $4 (4)
  642. scsiPBLength             ds.w   1        ; offset: $6 (6)
  643. scsiFunctionCode         ds.b   1        ; offset: $8 (8)
  644. scsiReserved2             ds.b   1        ; offset: $9 (9)
  645. scsiResult                 ds.w   1        ; offset: $A (10)
  646. scsiDevice                 ds     DeviceIdent ; offset: $C (12)
  647. scsiCompletion             ds.l   1        ; offset: $10 (16)
  648. scsiFlags                 ds.l   1        ; offset: $14 (20)
  649. scsiDriverStorage         ds.l   1        ; offset: $18 (24)
  650. scsiXPTprivate             ds.l   1        ; offset: $1C (28)
  651. scsiReserved3             ds.l   1        ; offset: $20 (32)
  652. scsiLoadedRefNum         ds.w   1        ; offset: $24 (36)        ; <- SIM returns refnum of driver                     
  653. scsiDiskLoadFailed         ds.b   1        ; offset: $26 (38)        ; -> if true, indicates call after failure to load 
  654. filler                     ds.b   1        ; offset: $27 (39)
  655. sizeof                     EQU *            ; size:   $28 (40)
  656.                         ENDR
  657.  
  658. ; typedef struct SCSILoadDriverPB  SCSILoadDriverPB
  659. ; Defines for the scsiTransferType field 
  660.  
  661. scsiTransferBlind                EQU        0
  662. scsiTransferPolled                EQU        1
  663.  
  664. ; Defines for the scsiDataType field 
  665. scsiDataBuffer                    EQU        0                    ; single contiguous buffer supplied                  
  666. scsiDataTIB                        EQU        1                    ; TIB supplied (ptr in scsiDataPtr)                 
  667. scsiDataSG                        EQU        2                    ; scatter/gather list supplied                      
  668.  
  669. ; Defines for the SCSIMgr scsiResult field in the PB header. 
  670. ;  $E100 thru  E1FF 
  671. ; -$1EFF thru -1E00 
  672. ; -#7935 thru -7681  
  673. ; = 0xE100 
  674. scsiErrorBase                    EQU        -7936
  675.  
  676. scsiRequestInProgress            EQU        1                    ; 1     = PB request is in progress             
  677. ; Execution failed  00-2F 
  678. scsiRequestAborted                EQU        scsiErrorBase + 2    ; -7934 = PB request aborted by the host         
  679. scsiUnableToAbort                EQU        scsiErrorBase + 3    ; -7933 = Unable to Abort PB request             
  680. scsiNonZeroStatus                EQU        scsiErrorBase + 4    ; -7932 = PB request completed with an err     
  681. scsiUnused05                    EQU        scsiErrorBase + 5    ; -7931 =                                      
  682. scsiUnused06                    EQU        scsiErrorBase + 6    ; -7930 =                                      
  683. scsiUnused07                    EQU        scsiErrorBase + 7    ; -7929 =                                      
  684. scsiUnused08                    EQU        scsiErrorBase + 8    ; -7928 =                                      
  685. scsiUnableToTerminate            EQU        scsiErrorBase + 9    ; -7927 = Unable to Terminate I/O PB req         
  686. scsiSelectTimeout                EQU        scsiErrorBase + 10    ; -7926 = Target selection timeout             
  687. scsiCommandTimeout                EQU        scsiErrorBase + 11    ; -7925 = Command timeout                      
  688. scsiIdentifyMessageRejected        EQU        scsiErrorBase + 12    ; -7924 =                                      
  689. scsiMessageRejectReceived        EQU        scsiErrorBase + 13    ; -7923 = Message reject received                 
  690. scsiSCSIBusReset                EQU        scsiErrorBase + 14    ; -7922 = SCSI bus reset sent/received         
  691. scsiParityError                    EQU        scsiErrorBase + 15    ; -7921 = Uncorrectable parity error occured     
  692. scsiAutosenseFailed                EQU        scsiErrorBase + 16    ; -7920 = Autosense: Request sense cmd fail     
  693. scsiUnused11                    EQU        scsiErrorBase + 17    ; -7919 =                                      
  694. scsiDataRunError                EQU        scsiErrorBase + 18    ; -7918 = Data overrun/underrun error          
  695. scsiUnexpectedBusFree            EQU        scsiErrorBase + 19    ; -7917 = Unexpected BUS free                     
  696. scsiSequenceFailed                EQU        scsiErrorBase + 20    ; -7916 = Target bus phase sequence failure     
  697. scsiWrongDirection                EQU        scsiErrorBase + 21    ; -7915 = Data phase was in wrong direction     
  698. scsiUnused16                    EQU        scsiErrorBase + 22    ; -7914 =                                      
  699. scsiBDRsent                        EQU        scsiErrorBase + 23    ; -7913 = A SCSI BDR msg was sent to target     
  700. scsiTerminated                    EQU        scsiErrorBase + 24    ; -7912 = PB request terminated by the host     
  701. scsiNoNexus                        EQU        scsiErrorBase + 25    ; -7911 = Nexus is not established             
  702. scsiCDBReceived                    EQU        scsiErrorBase + 26    ; -7910 = The SCSI CDB has been received         
  703. ; Couldn't begin execution  30-3F 
  704. scsiTooManyBuses                EQU        scsiErrorBase + 48    ; -7888 = Register failed because we're full    
  705. scsiBusy                        EQU        scsiErrorBase + 49    ; -7887 = SCSI subsystem is busy                 
  706. scsiProvideFail                    EQU        scsiErrorBase + 50    ; -7886 = Unable to provide requ. capability    
  707. scsiDeviceNotThere                EQU        scsiErrorBase + 51    ; -7885 = SCSI device not installed/there      
  708. scsiNoHBA                        EQU        scsiErrorBase + 52    ; -7884 = No HBA detected Error                 
  709. scsiDeviceConflict                EQU        scsiErrorBase + 53    ; -7883 = sorry, max 1 refNum per DeviceIdent     
  710. scsiNoSuchXref                    EQU        scsiErrorBase + 54    ; -7882 = no such RefNum xref                     
  711. scsiQLinkInvalid                EQU        scsiErrorBase + 55    ; -7881 = pre-linked PBs not supported            
  712. ;                                                                   (The QLink field was nonzero)        
  713. ; Parameter errors  40-7F 
  714. scsiPBLengthError                EQU        scsiErrorBase + 64    ; -7872 = (scsiPBLength is insuf'ct/invalid     
  715. scsiFunctionNotAvailable        EQU        scsiErrorBase + 65    ; -7871 = The requ. func is not available      
  716. scsiRequestInvalid                EQU        scsiErrorBase + 66    ; -7870 = PB request is invalid                 
  717. scsiBusInvalid                    EQU        scsiErrorBase + 67    ; -7869 = Bus ID supplied is invalid              
  718. scsiTIDInvalid                    EQU        scsiErrorBase + 68    ; -7868 = Target ID supplied is invalid         
  719. scsiLUNInvalid                    EQU        scsiErrorBase + 69    ; -7867 = LUN supplied is invalid              
  720. scsiIDInvalid                    EQU        scsiErrorBase + 70    ; -7866 = The initiator ID is invalid          
  721. scsiDataTypeInvalid                EQU        scsiErrorBase + 71    ; -7865 = scsiDataType requested not supported 
  722. scsiTransferTypeInvalid            EQU        scsiErrorBase + 72    ; -7864 = scsiTransferType field is too high     
  723. scsiCDBLengthInvalid            EQU        scsiErrorBase + 73    ; -7863 = scsiCDBLength field is too big         
  724.  
  725. scsiExecutionErrors                EQU        scsiErrorBase
  726. scsiNotExecutedErrors            EQU        scsiTooManyBuses
  727. scsiParameterErrors                EQU        scsiPBLengthError
  728.  
  729. ; Defines for the scsiResultFlags field 
  730. scsiSIMQFrozen                    EQU        $0001                ; The SIM queue is frozen w/this err            
  731. scsiAutosenseValid                EQU        $0002                ; Autosense data valid for target              
  732. scsiBusNotFree                    EQU        $0004                ; At time of callback, SCSI bus is not free    
  733.  
  734. ; Defines for the bit numbers of the scsiFlags field in the PB header for the SCSIExecIO function 
  735. kbSCSIDisableAutosense            EQU        29                    ; Disable auto sense feature                     
  736. kbSCSIFlagReservedA                EQU        28                    ;                                              
  737. kbSCSIFlagReserved0                EQU        27                    ;                                              
  738. kbSCSICDBLinked                    EQU        26                    ; The PB contains a linked CDB                    
  739. kbSCSIQEnable                    EQU        25                    ; Target queue actions are enabled                
  740. kbSCSICDBIsPointer                EQU        24                    ; The CDB field contains a pointer                
  741. kbSCSIFlagReserved1                EQU        23                    ;                                                 
  742. kbSCSIInitiateSyncData            EQU        22                    ; Attempt Sync data xfer and SDTR                
  743. kbSCSIDisableSyncData            EQU        21                    ; Disable sync, go to async                    
  744. kbSCSISIMQHead                    EQU        20                    ; Place PB at the head of SIM Q                
  745. kbSCSISIMQFreeze                EQU        19                    ; Return the SIM Q to frozen state                
  746. kbSCSISIMQNoFreeze                EQU        18                    ; Disallow SIM Q freezing                        
  747. kbSCSIDoDisconnect                EQU        17                    ; Definitely do disconnect                        
  748. kbSCSIDontDisconnect            EQU        16                    ; Definitely don't disconnect                    
  749. kbSCSIDataReadyForDMA            EQU        15                    ; Data buffer(s) are ready for DMA                
  750. kbSCSIFlagReserved3                EQU        14                    ;                                                 
  751. kbSCSIDataPhysical                EQU        13                    ; SG/Buffer data ptrs are physical                
  752. kbSCSISensePhysical                EQU        12                    ; Autosense buffer ptr is physical                
  753. kbSCSIFlagReserved5                EQU        11                    ;                                                 
  754. kbSCSIFlagReserved6                EQU        10                    ;                                                 
  755. kbSCSIFlagReserved7                EQU        9                    ;                                                 
  756. kbSCSIFlagReserved8                EQU        8                    ;                                                 
  757. kbSCSIDataBufferValid            EQU        7                    ; Data buffer valid                            
  758. kbSCSIStatusBufferValid            EQU        6                    ; Status buffer valid                             
  759. kbSCSIMessageBufferValid        EQU        5                    ; Message buffer valid                            
  760. kbSCSIFlagReserved9                EQU        4                    ;                                              
  761.  
  762. ; Defines for the bit masks of the scsiFlags field 
  763. scsiDirectionMask                EQU        $C0000000            ; Data direction mask                        
  764. scsiDirectionNone                EQU        $C0000000            ; Data direction (11: no data)                
  765. scsiDirectionReserved            EQU        $00000000            ; Data direction (00: reserved)            
  766. scsiDirectionOut                EQU        $80000000            ; Data direction (10: DATA OUT)            
  767. scsiDirectionIn                    EQU        $40000000            ; Data direction (01: DATA IN)                
  768. scsiDisableAutosense            EQU        $20000000            ; Disable auto sense feature                
  769. scsiFlagReservedA                EQU        $10000000            ;                                             
  770. scsiFlagReserved0                EQU        $08000000            ;                                             
  771. scsiCDBLinked                    EQU        $04000000            ; The PB contains a linked CDB                
  772. scsiQEnable                        EQU        $02000000            ; Target queue actions are enabled            
  773. scsiCDBIsPointer                EQU        $01000000            ; The CDB field contains a pointer            
  774. scsiFlagReserved1                EQU        $00800000            ;                                             
  775. scsiInitiateSyncData            EQU        $00400000            ; Attempt Sync data xfer and SDTR            
  776. scsiDisableSyncData                EQU        $00200000            ; Disable sync, go to async                
  777. scsiSIMQHead                    EQU        $00100000            ; Place PB at the head of SIM Q            
  778. scsiSIMQFreeze                    EQU        $00080000            ; Return the SIM Q to frozen state            
  779. scsiSIMQNoFreeze                EQU        $00040000            ; Disallow SIM Q freezing                    
  780. scsiDoDisconnect                EQU        $00020000            ; Definitely do disconnect                    
  781. scsiDontDisconnect                EQU        $00010000            ; Definitely don't disconnect                
  782. scsiDataReadyForDMA                EQU        $00008000            ; Data buffer(s) are ready for DMA            
  783. scsiFlagReserved3                EQU        $00004000            ;  
  784. scsiDataPhysical                EQU        $00002000            ; SG/Buffer data ptrs are physical            
  785. scsiSensePhysical                EQU        $00001000            ; Autosense buffer ptr is physical            
  786. scsiFlagReserved5                EQU        $00000800            ;                                          
  787. scsiFlagReserved6                EQU        $00000400            ;                                             
  788. scsiFlagReserved7                EQU        $00000200            ;                                             
  789. scsiFlagReserved8                EQU        $00000100            ;                                             
  790.  
  791. ; bit masks for the scsiIOFlags field in SCSIExecIOPB 
  792. scsiNoParityCheck                EQU        $0002                ; disable parity checking                             
  793. scsiDisableSelectWAtn            EQU        $0004                ; disable select w/Atn                              
  794. scsiSavePtrOnDisconnect            EQU        $0008                ; do SaveDataPointer upon Disconnect msg             
  795. scsiNoBucketIn                    EQU        $0010                ; don’t bit bucket in during this I/O                 
  796. scsiNoBucketOut                    EQU        $0020                ; don’t bit bucket out during this I/O             
  797. scsiDisableWide                    EQU        $0040                ; disable wide transfer negotiation                 
  798. scsiInitiateWide                EQU        $0080                ; initiate wide transfer negotiation                 
  799. scsiRenegotiateSense            EQU        $0100                ; renegotiate sync/wide before issuing autosense     
  800. scsiDisableDiscipline            EQU        $0200                ; disable parameter checking on SCSIExecIO calls    
  801. scsiIOFlagReserved0080            EQU        $0080                ;                                                  
  802. scsiIOFlagReserved8000            EQU        $8000                ;                                                     
  803.  
  804. ; Defines for the SIM/HBA queue actions.  These values are used in the 
  805. ; SCSIExecIOPB, for the queue action field. [These values should match the 
  806. ; defines from some other include file for the SCSI message phases.  We may 
  807. ; not need these definitions here. ] 
  808. scsiSimpleQTag                    EQU        $20                    ; Tag for a simple queue                                 
  809. scsiHeadQTag                    EQU        $21                    ; Tag for head of queue                                  
  810. scsiOrderedQTag                    EQU        $22                    ; Tag for ordered queue                                 
  811.  
  812. ; Defines for the Bus Inquiry PB fields. 
  813. ; scsiHBAInquiry field bits 
  814. scsiBusMDP                        EQU        $80                    ; Supports Modify Data Pointer message                        
  815. scsiBusWide32                    EQU        $40                    ; Supports 32 bit wide SCSI                                
  816. scsiBusWide16                    EQU        $20                    ; Supports 16 bit wide SCSI                                
  817. scsiBusSDTR                        EQU        $10                    ; Supports Sync Data Transfer Req message                    
  818. scsiBusLinkedCDB                EQU        $08                    ; Supports linked CDBs                                        
  819. scsiBusTagQ                        EQU        $02                    ; Supports tag queue message                                
  820. scsiBusSoftReset                EQU        $01                    ; Supports soft reset                                        
  821.  
  822. ; scsiDataTypes field bits  
  823. ;    bits 0->15 Apple-defined, 16->30 3rd-party unique, 31 = reserved 
  824. scsiBusDataTIB                    EQU        (1 << scsiDataTIB)    ; TIB supplied (ptr in scsiDataPtr)        
  825. scsiBusDataBuffer                EQU        (1 << scsiDataBuffer) ; single contiguous buffer supplied         
  826. scsiBusDataSG                    EQU        (1 << scsiDataSG)    ; scatter/gather list supplied             
  827. scsiBusDataReserved                EQU        $80000000            ;                                           
  828.  
  829. ; scsiScanFlags field bits 
  830. scsiBusScansDevices                EQU        $80                    ; Bus scans for and maintains device list            
  831. scsiBusScansOnInit                EQU        $40                    ; Bus scans performed at power-up/reboot            
  832. scsiBusLoadsROMDrivers            EQU        $20                    ; may load ROM drivers to support targets             
  833.  
  834. ; scsiFeatureFlags field bits 
  835. scsiBusInternalExternalMask        EQU        $000000C0            ; bus internal/external mask                    
  836. scsiBusInternalExternalUnknown    EQU        $00000000            ; not known whether bus is inside or outside     
  837. scsiBusInternalExternal            EQU        $000000C0            ; bus goes inside and outside the box             
  838. scsiBusInternal                    EQU        $00000080            ; bus goes inside the box                         
  839. scsiBusExternal                    EQU        $00000040            ; bus goes outside the box                     
  840. scsiBusCacheCoherentDMA            EQU        $00000020            ; DMA is cache coherent                         
  841. scsiBusOldCallCapable            EQU        $00000010            ; SIM is old call capable                         
  842. scsiBusDifferential                EQU        $00000004            ; Single Ended (0) or Differential (1)         
  843. scsiBusFastSCSI                    EQU        $00000002            ; HBA supports fast SCSI                         
  844. scsiBusDMAavailable                EQU        $00000001            ; DMA is available                             
  845.  
  846. ; scsiWeirdStuff field bits 
  847. scsiOddDisconnectUnsafeRead1    EQU        $0001                ; Disconnects on odd byte boundries are unsafe with DMA and/or blind reads 
  848. scsiOddDisconnectUnsafeWrite1    EQU        $0002                ; Disconnects on odd byte boundries are unsafe with DMA and/or blind writes 
  849. scsiBusErrorsUnsafe                EQU        $0004                ; Non-handshaked delays or disconnects during blind transfers may cause a crash 
  850. scsiRequiresHandshake            EQU        $0008                ; Non-handshaked delays or disconnects during blind transfers may cause data corruption 
  851. scsiTargetDrivenSDTRSafe        EQU        $0010                ; Targets which initiate synchronous negotiations are supported 
  852. scsiOddCountForPhysicalUnsafe    EQU        $0020                ; If using physical addrs all counts must be even, and disconnects must be on even boundries 
  853.  
  854. ; scsiHBAslotType values 
  855. scsiMotherboardBus                EQU        $00                    ; A built in Apple supplied bus                     
  856. scsiNuBus                        EQU        $01                    ; A SIM on a NuBus card                             
  857. scsiPDSBus                        EQU        $03                    ;    "  on a PDS card                                
  858. scsiPCIBus                        EQU        $04                    ;    "  on a PCI bus card                            
  859. scsiPCMCIABus                    EQU        $05                    ;    "  on a PCMCIA card                            
  860. scsiFireWireBridgeBus            EQU        $06                    ;    "  connected through a FireWire bridge        
  861.  
  862. ; Defines for the scsiDriverFlags field (in SCSIDriverPB) 
  863. scsiDeviceSensitive                EQU        $0001                ; Only driver should access this device                
  864. scsiDeviceNoOldCallAccess        EQU        $0002                ; no old call access to this device                     
  865.  
  866. ;  SIMInitInfo PB 
  867. ; directions are for SCSIRegisterBus call ( -> parm, <- result)             
  868. SIMInitInfo             RECORD    0
  869. SIMstaticPtr             ds.l   1        ; offset: $0 (0)        ; <- alloc. ptr to the SIM's static vars                 
  870. staticSize                 ds.l   1        ; offset: $4 (4)        ; -> num bytes SIM needs for static vars                 
  871. SIMInit                     ds.l   1        ; offset: $8 (8)        ; -> pointer to the SIM init routine                     
  872. SIMAction                 ds.l   1        ; offset: $C (12)        ; -> pointer to the SIM action routine                 
  873. SIM_ISR                     ds.l   1        ; offset: $10 (16)        ;       reserved                                             
  874. SIMInterruptPoll         ds.l   1        ; offset: $14 (20)        ; -> pointer to the SIM interrupt poll routine            
  875. NewOldCall                 ds.l   1        ; offset: $18 (24)        ; -> pointer to the SIM NewOldCall routine                
  876. ioPBSize                 ds.w   1        ; offset: $1C (28)        ; -> size of SCSI_IO_PBs required for this SIM            
  877. oldCallCapable             ds.b   1        ; offset: $1E (30)        ; -> true if this SIM can handle old-API calls            
  878. simInfoUnused1             ds.b   1        ; offset: $1F (31)        ;       reserved                                            
  879. simInternalUse             ds.l   1        ; offset: $20 (32)        ; xx not affected or viewed by XPT                        
  880. XPT_ISR                     ds.l   1        ; offset: $24 (36)        ;    reserved                                            
  881. EnteringSIM                 ds.l   1        ; offset: $28 (40)        ; <- ptr to the EnteringSIM routine                    
  882. ExitingSIM                 ds.l   1        ; offset: $2C (44)        ; <- ptr to the ExitingSIM routine                        
  883. MakeCallback             ds.l   1        ; offset: $30 (48)        ; <- the XPT layer’s SCSIMakeCallback routine            
  884. busID                     ds.w   1        ; offset: $34 (52)        ; <- bus number for the registered bus                    
  885. simSlotNumber             ds.b   1        ; offset: $36 (54)        ; <- Magic cookie to place in scsiHBASlotNumber (PCI)    
  886. simSRsrcID                 ds.b   1        ; offset: $37 (55)        ; <- Magic cookie to place in scsiSIMsRsrcID     (PCI)    
  887. simRegEntry                 ds.l   1        ; offset: $38 (56)        ; -> The SIM's RegEntryIDPtr                     (PCI)    
  888. sizeof                     EQU *            ; size:   $3C (60)
  889.                         ENDR
  890.  
  891. ; typedef struct SIMInitInfo  SIMInitInfo
  892. ; Glue between SCSI calls and SCSITrap format 
  893.  
  894. xptSCSIAction                    EQU        $0001
  895. xptSCSIRegisterBus                EQU        $0002
  896. xptSCSIDeregisterBus            EQU        $0003
  897. xptSCSIReregisterBus            EQU        $0004
  898. xptSCSIKillXPT                    EQU        $0005                ; kills Mini-XPT after transition 
  899. xptSCSIInitialize                EQU        $000A                ; Initialize the SCSI manager 
  900.  
  901. ; SCSI status
  902. scsiStatGood                    EQU        $00                    ; Good Status
  903. scsiStatCheckCondition            EQU        $02                    ; Check Condition
  904. scsiStatConditionMet            EQU        $04                    ; Condition Met
  905. scsiStatBusy                    EQU        $08                    ; Busy
  906. scsiStatIntermediate            EQU        $10                    ; Intermediate
  907. scsiStatIntermedMet                EQU        $14                    ; Intermediate - Condition Met
  908. scsiStatResvConflict            EQU        $18                    ; Reservation conflict
  909. scsiStatTerminated                EQU        $20                    ; Command terminated
  910. scsiStatQFull                    EQU        $28                    ; Queue full
  911.  
  912. ; SCSI messages
  913. kCmdCompleteMsg                    EQU        0
  914. kExtendedMsg                    EQU        1                    ; 0x01
  915. kSaveDataPointerMsg                EQU        2                    ; 0x02
  916. kRestorePointersMsg                EQU        3                    ; 0x03
  917. kDisconnectMsg                    EQU        4                    ; 0x04
  918. kInitiatorDetectedErrorMsg        EQU        5                    ; 0x05
  919. kAbortMsg                        EQU        6                    ; 0x06
  920. kMsgRejectMsg                    EQU        7                    ; 0x07
  921. kNoOperationMsg                    EQU        8                    ; 0x08
  922. kMsgParityErrorMsg                EQU        9                    ; 0x09
  923. kLinkedCmdCompleteMsg            EQU        10                    ; 0x0a
  924. kLinkedCmdCompleteWithFlagMsg    EQU        11                    ; 0x0b
  925. kBusDeviceResetMsg                EQU        12                    ; 0x0c
  926. kAbortTagMsg                    EQU        13                    ; 0x0d
  927. kClearQueueMsg                    EQU        14                    ; 0x0e
  928. kInitiateRecoveryMsg            EQU        15                    ; 0x0f
  929. kReleaseRecoveryMsg                EQU        16                    ; 0x10
  930. kTerminateIOProcessMsg            EQU        17                    ; 0x11
  931. kSimpleQueueTag                    EQU        $20                    ; 0x20
  932. kHeadOfQueueTagMsg                EQU        33                    ; 0x21
  933. kOrderedQueueTagMsg                EQU        34                    ; 0x22
  934. kIgnoreWideResidueMsg            EQU        35                    ; 0x23
  935.  
  936. ; moveq #kSCSIx, D0;  _SCSIAtomic 
  937. ;
  938. ; pascal OSErr SCSIAction(SCSI_PB *parameterBlock)
  939. ;
  940.     IF ¬ GENERATINGCFM THEN
  941.         ; parameters: 
  942.         ;     parameterBlock    => A0
  943.         ; returns: 
  944.         ;     OSErr             <= D0
  945.         Macro
  946.         _SCSIAction
  947.             moveq    #1,d0
  948.             dc.w     $A089
  949.         EndM
  950.     ELSE
  951.         IMPORT_CFM_FUNCTION    SCSIAction
  952.     ENDIF
  953.  
  954. ;
  955. ; pascal OSErr SCSIRegisterBus(SIMInitInfo *parameterBlock)
  956. ;
  957.     IF ¬ GENERATINGCFM THEN
  958.         ; parameters: 
  959.         ;     parameterBlock    => A0
  960.         ; returns: 
  961.         ;     OSErr             <= D0
  962.         Macro
  963.         _SCSIRegisterBus
  964.             moveq    #2,d0
  965.             dc.w     $A089
  966.         EndM
  967.     ELSE
  968.         IMPORT_CFM_FUNCTION    SCSIRegisterBus
  969.     ENDIF
  970.  
  971. ;
  972. ; pascal OSErr SCSIDeregisterBus(SCSI_PB *parameterBlock)
  973. ;
  974.     IF ¬ GENERATINGCFM THEN
  975.         ; parameters: 
  976.         ;     parameterBlock    => A0
  977.         ; returns: 
  978.         ;     OSErr             <= D0
  979.         Macro
  980.         _SCSIDeregisterBus
  981.             moveq    #3,d0
  982.             dc.w     $A089
  983.         EndM
  984.     ELSE
  985.         IMPORT_CFM_FUNCTION    SCSIDeregisterBus
  986.     ENDIF
  987.  
  988. ;
  989. ; pascal OSErr SCSIReregisterBus(SIMInitInfo *parameterBlock)
  990. ;
  991.     IF ¬ GENERATINGCFM THEN
  992.         ; parameters: 
  993.         ;     parameterBlock    => A0
  994.         ; returns: 
  995.         ;     OSErr             <= D0
  996.         Macro
  997.         _SCSIReregisterBus
  998.             moveq    #4,d0
  999.             dc.w     $A089
  1000.         EndM
  1001.     ELSE
  1002.         IMPORT_CFM_FUNCTION    SCSIReregisterBus
  1003.     ENDIF
  1004.  
  1005. ;
  1006. ; pascal OSErr SCSIKillXPT(SIMInitInfo *parameterBlock)
  1007. ;
  1008.     IF ¬ GENERATINGCFM THEN
  1009.         ; parameters: 
  1010.         ;     parameterBlock    => A0
  1011.         ; returns: 
  1012.         ;     OSErr             <= D0
  1013.         Macro
  1014.         _SCSIKillXPT
  1015.             moveq    #5,d0
  1016.             dc.w     $A089
  1017.         EndM
  1018.     ELSE
  1019.         IMPORT_CFM_FUNCTION    SCSIKillXPT
  1020.     ENDIF
  1021.  
  1022.     ENDIF ; __SCSI__
  1023.